package poo.exo1;

public class CompteAction extends CompteSansLimite
{
	final static int MINIMUMVERSEMENTINITIALACTION = 100;

	final double plafondMaximum;

	public CompteAction(String nom, int numeroCompte, double capital, double plafond) throws MyException
	{
		super(nom, numeroCompte, capital);

		if (capital < MINIMUMVERSEMENTINITIALACTION)
		{
			throw new MyException("Erreur: Versement minimum doit être supérieur à " + MINIMUMVERSEMENTINITIALACTION
					+ ".");
		}
		if (plafond < 0)
		{
			throw new MyException("Erreur: Le plafond ne peut être négatif.");
		}

		plafondMaximum = plafond;
		type = 3;
	}

	@Override
	public boolean retirer(double somme) throws MyException
	{
		if (this.ouvert == false)
		{
			throw new MyException("Erreur: Votre compte a été cloturé");
		}

		return true;

	}

	@Override
	public boolean deposer(double somme) throws MyException
	{
		if (this.ouvert == false)
		{
			throw new MyException("Erreur: Votre compte a été cloturé");
		}
		if (somme > plafondMaximum)
		{
			throw new MyException("Erreur: Votre dépôt ne peut dépasser le plafond maximum fixé à" + plafondMaximum
					+ " €.");
		}
		solde += somme;
		System.out.println("Dépôt de " + somme + " €.");
		return true;

	}

	@Override
	public boolean transferer(double somme, Compte cible) throws MyException
	{

		if (this.ouvert == false)
		{
			throw new MyException("Erreur: Votre compte a été cloturé.");
		}

		if (cible.isOuvert() && this.isOuvert())
		{
			if (cible.type != 3)
			{
				if (!this.retirer(somme))
				{
					throw new MyException("Erreur: Le transfert à échoué.");
				}
				if (!cible.deposer(somme))
				{
					throw new MyException("Erreur: Le transfert à échoué.");
				}
				System.out.println("Transfert effectué");
			}
		}

		return true;
	}
}
